package com.findyou.advice;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * @Title: MyAdvice
 * @Author 贾金博
 * @Package com.findyou.advice
 * @Date 2024/2/7 13:58
 * @description: 定义四个增强方法 获取目标的信息 返回值 异常对象
 * TODO: 增强方法中获取目标方法信息
 *      1: 全部增强方法中，获取目标方法的信息(方法名, 参数, 访问修饰符, 所属的类的信息.....)
 *      2: 返回的结果 -@AfterReturning
 *      3: 异常的信息
 */
//@Component
//@Aspect
public class MyAdvice {

    @Before("com.findyou.pointcut.MyPointCut.pc()")
    //@Before("execution(* com..impl.*.*(..))") // 或者是写成 @Before("pc()")
    public void before(JoinPoint joinPoint) { // 添加的这个叫连接点 目标方法信息的一个封装的对象
        // 获取方法所属的类的信息
        Object target = joinPoint.getTarget(); // 获取这个类的对象
        String simpleName1 = target.getClass().getSimpleName(); // 和 simpleName 是类似的
        String simpleName = joinPoint.getTarget().getClass().getSimpleName();
        // 获取方法名称
        String name = joinPoint.getSignature().getName(); // 获取方法名
        // 获取参数列表
        Object[] args = joinPoint.getArgs(); // 获取的是参数
    }

    @AfterReturning("execution(* com..impl.*.*(..))")
    public void afterReturning() {

    }

    @AfterThrowing("execution(* com..impl.*.*(..))")
    public void after() {

    }

    @AfterThrowing("execution(* com..impl.*.*(..))")
    public void afterThrowing() {

    }

    //上面是可以转换为


}
